// 主程序入口
// 在开发模式下拥有一个可工作的Electron应用程序后，您需要使用其他工具来创建可分发给用户的打包应用程序（也称为**可分发文件**）。
// 可分发文件可以是安装程序（例如 Windows 上的 MSI）或可移植的可执行文件（例如 macOS 上的.app）。
// 要创建可分发文件，请使用项目的新make脚本，该脚本运行electron-forge make命令
// npm run make -- --arch="ia32", 默认为当前运行的架构（“宿主”架构）。允许的值为：“ia32”、“x64”、“armv7l”、“arm64”、“universal”或“mips64el”。多个值之间用逗号分隔。

import { app, BrowserWindow, Menu } from 'electron';
import started from 'electron-squirrel-startup';
import path from 'path';
import { TOOLS_MENU } from './utils/application-menu';

// 在安装/卸载时处理Windows上快捷方式的创建/删除
if (started) {
  app.quit();
}

const createWindow = () => {
  // 创建浏览器窗口
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true, // 是否启用Node集成
      preload: path.join(__dirname, 'preload.js'), // 在页面运行其他脚本之前预先加载指定的脚本，无论页面是否集成Node, 此脚本都可以访问所有Node API 脚本路径为文件的绝对路径
      autoplayPolicy: 'no-user-gesture-required' // 窗口中内容要自动播放策略：no-user-gesture-required, user-gesture-required, document-user-activation-required
    },
    icon: 'public/icon/app.ico'
  });

  // 加载应用程序的index.html
  if (MAIN_WINDOW_VITE_DEV_SERVER_URL) {
    mainWindow.loadURL(MAIN_WINDOW_VITE_DEV_SERVER_URL);
  } else {
    mainWindow.loadFile(path.join(__dirname, `../renderer/${MAIN_WINDOW_VITE_NAME}/index.html`));
  }

  // 创建菜单
  const menu = Menu.buildFromTemplate(TOOLS_MENU);
  mainWindow.setMenu(menu);

  // 打开开发者工具
  // mainWindow.webContents.openDevTools();
};

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow);

// 当所有窗口都关闭时退出，但在macOS上除外。
// 在那里，应用程序及其菜单栏通常会保持活动状态，直到用户明确地通过Cmd + Q退出。
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

// 在OS X系统中，当点击Dock图标且没有其他窗口打开时，通常会重新创建一个应用窗口。
app.on('activate', () => {
  // On OS X it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow();
  }
});

// 新建http-server
import httpServer from 'http-server';
httpServer.createServer({ root: './web' }).listen(24000);

// 在这个文件中，你可以包含应用程序其余特定主进程的代码。
// 你也可以将它们放在单独的文件中，并在此处导入。
